import socket
import re
import os
import time
import threading

"模块文件，指定服务端运行的命令，并接收返回的结果"

# 读取serverip.txt文件，返回一个列表，每个元素的格式：ip:port
def get_server_lists():
    ip_lists = []
    rfiles = open('serverip.txt','r')
    rs = rfiles.readlines()
    for s in rs:
        s1 = s.replace('\n','')
        if not s1.startswith('#'):
            ip_lists.append(s1)
    return ip_lists

# 与服务端之间建立socket会话，收发数据
def tcp_socket_client(tcpsocket, ip, port, command):
    try:
        tcpsocket.connect((ip,port))
        #print('%s:连接成功'%ip)

        #输入需要执行的选择，发送给服务端
        tcpsocket.send('4'.encode('utf-8'))

        # 接收服务器返回的消息
        rec_data = tcpsocket.recv(1024)
        #print(ip + ':' + rec_data.decode('gbk'))

        #发送命令给服务端
        tcpsocket.send(command.encode('utf-8'))
        
        #接受服务端返回的内容
        recv_content = tcpsocket.recv(1024*1024)
        print('%s:返回内容：\n'%ip + recv_content.decode('gbk'))

        tcpsocket.close()
    except:
        print('%s:连接失败'%ip)

# 主函数
def main():
    print('输入你想要做的指令,例如ipconfig,注意，请不要执行关机等危险操作！！！')
    command = input()

    # 将所有的线程放在列表中
    th_lists = []
    for s in get_server_lists():
        ip = re.split(':',s)[0]
        port = int(re.split(':',s)[1])
        try:
            tcp_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
            #调用功能函数
            #tcp_socket_client(tcp_socket,ip,port,command)
            th =  threading.Thread(target=tcp_socket_client,args=(tcp_socket,ip,port,command))   
            th_lists.append(th)  
        except:
            print('指令发送失败,socket将关闭！！！！')
            tcp_socket.close()
    
    for t in th_lists:
        t.start()
        time.sleep(0.5)
    
    for t in th_lists:
        t.join()
    

     